import java.io.File;
import java.io.IOException;
import java.util.ArrayList;
import java.util.regex.Matcher;
import java.util.regex.Pattern;

import javax.xml.parsers.DocumentBuilder;
import javax.xml.parsers.DocumentBuilderFactory;
import javax.xml.parsers.ParserConfigurationException;
import javax.xml.transform.OutputKeys;
import javax.xml.transform.Source;
import javax.xml.transform.Transformer;
import javax.xml.transform.TransformerFactory;
import javax.xml.transform.dom.DOMSource;
import javax.xml.transform.stream.StreamResult;

import org.w3c.dom.Document;
import org.w3c.dom.Element;
import org.w3c.dom.Node;
import org.w3c.dom.NodeList;
import org.xml.sax.SAXException;


public class personnes {

	public static void main(String[] args) throws ParserConfigurationException, SAXException, IOException {
		DocumentBuilderFactory dbf = DocumentBuilderFactory.newInstance();

		DocumentBuilder db = dbf.newDocumentBuilder ();
		Document doc_personne = db.newDocument();

		
		Element personnes = doc_personne.createElement("Personnes");
		
		ArrayList<String> cvs = listeCv();
		for(int i = 0; i < cvs.size(); i++)
			addCompetance(personnes, doc_personne, cvs.get(i));

		doc_personne.appendChild(personnes);
		transformerXml(doc_personne, "Personnes.xml");

	}

	
	public static void transformerXml(Document document, String fichier) {
		try {
			// Création de la source DOM
			Source source = new DOMSource(document);
			
			// Création du fichier de sortie
			StreamResult resultat = new StreamResult(fichier);
			
			// Configuration du transformer
			TransformerFactory fabrique = TransformerFactory.newInstance();
			Transformer transformer = fabrique.newTransformer();
			transformer.setOutputProperty(OutputKeys.INDENT, "yes");
			transformer.setOutputProperty(OutputKeys.ENCODING, "ISO-8859-1");
			
			// Transformation
			transformer.transform(source, resultat);
		}catch(Exception e){
			e.printStackTrace();
		}
	}
	
	public static ArrayList<String> listeCv(){

		Pattern p = Pattern.compile("P[0-9]{8}.xml");
		String [] s = new File(".").list();
		ArrayList<String> listeFichiers = new ArrayList<String>();
		
		for (int i=0; i<s.length;i++) {
			Matcher m = p.matcher(s[i]);
			if ( m.matches())
				listeFichiers.add(s[i]);
		}
		
		return listeFichiers;
	}
	
	
	public static void addCompetance(Element personnes, Document doc_pers, String pathCv) throws ParserConfigurationException, SAXException, IOException {
		DocumentBuilderFactory dbf = DocumentBuilderFactory.newInstance();
		
		DocumentBuilder db = dbf.newDocumentBuilder ();
		Document doc_cv = db.parse(new File(pathCv));
		Document doc_comp = db.parse(new File("Competences.xml"));
		
		Element racine_cv = doc_cv.getDocumentElement();

		
		
		// Personne
		Element personne = doc_pers.createElement("Personne");

		
		// Nom
		Element nom = doc_pers.createElement("Nom");
		nom.appendChild(doc_pers.createTextNode(racine_cv.getElementsByTagName("Nom").item(0).getTextContent()));
		personne.appendChild(nom);

		
		// Prenom
		Element prenom = doc_pers.createElement("Prenom");
		prenom.appendChild(doc_pers.createTextNode(racine_cv.getElementsByTagName("Prenom").item(0).getTextContent()));
		personne.appendChild(prenom);

		
		// Nom du fichier
		Element nomFichier = doc_pers.createElement("NomFichier");
		nomFichier.appendChild(doc_pers.createTextNode(pathCv));
		personne.appendChild(nomFichier);
		
		// Competences
		NodeList competences_list = racine_cv.getElementsByTagName("Competences");
		competences_list = competences_list.item(0).getChildNodes();
		Element competences = doc_pers.createElement("Competences");
		
		for(int i = 1; i < competences_list.getLength(); i += 2) {
			Element comp = doc_pers.createElement("Comp");
		
			comp.setAttribute("idC", getIdCom(doc_comp, competences_list.item(i).getTextContent().trim()));
			
			competences.appendChild(comp);
		}

		personne.appendChild(competences);



		personnes.appendChild(personne);
		
	}
	
	public static String getIdCom(Document doc_comp, String comp) {
		//System.out.println("Ici : " + comp);
		
		Element racine_comp = doc_comp.getDocumentElement();
		
		NodeList competences_list = racine_comp.getElementsByTagName("Nom");
		

		for(int i = 0; i < competences_list.getLength(); i++) {
			//Probleme ici
			String nom = competences_list.item(i).getTextContent().trim();
			
			if(nom.toUpperCase().equals(comp.trim().toUpperCase()))
				return "C" + (i + 1);
		}
		
		System.out.println(comp);
		return "C-1";
	}
	
	
}
